package ar.edu.utn.frsf.tpae.a2013.g03.presentacion.controller.empleado;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import ar.edu.utn.frsf.tpae.a2013.g03.persistencia.model.CentroCosto;
import ar.edu.utn.frsf.tpae.a2013.g03.persistencia.model.Empleado;
import ar.edu.utn.frsf.tpae.a2013.g03.persistencia.model.Gasto;
import ar.edu.utn.frsf.tpae.a2013.g03.persistencia.model.SolicitudGasto;
import ar.edu.utn.frsf.tpae.a2013.g03.persistencia.model.Usuario;
import ar.edu.utn.frsf.tpae.a2013.g03.persistencia.utilities.Constantes;
import ar.edu.utn.frsf.tpae.a2013.g03.service.EmpleadoService;

@ManagedBean(name="empleadoBean")
@SessionScoped
public class EmpleadoBean {

		@ManagedProperty(value="#{empleadoService}")
        EmpleadoService empleadoService;    
                        
        private Usuario usuario;
        private Empleado empleado;
        private SolicitudGasto solicitudGasto;
        private List<CentroCosto> listaCentrosCosto;
    	private Integer idCentroCosto;
        private List<SolicitudGasto> listaPendientes;
        private List<SolicitudGasto> listaAprobadas;
        private List<SolicitudGasto> listaRechazadas; 
        private Gasto gasto; 
        private String user;
        private String pass;
        private Date fechaAux;

        @PostConstruct
        public void init() {            

        }
        
        public String guardarSolicitud() {               

        	if (idCentroCosto.equals(-1)) {
        		return null;
        	}              
        	solicitudGasto.setCentroCosto(getCentroCosto(idCentroCosto));          
        	solicitudGasto.setFechaCreacion(Calendar.getInstance());           
        	solicitudGasto.setEmpleado(empleado);
        	solicitudGasto.setEstado(Constantes.PENDIENTE);
        	solicitudGasto.setSupervisor(null);
        	try {
        		empleadoService.crearSolicitud(solicitudGasto);
        		//solicitudGasto = new SolicitudGasto();
        		return "aMenuEmpleado";
        	} catch (Exception e) {
        		e.printStackTrace();
        	}
        	return "aMenuEmpleado";
        }
        
        public String guardarGasto() { 
        	//gasto = new Gasto();
        	Calendar aux = Calendar.getInstance();
        	aux.setTime(fechaAux);
        	aux.add(Calendar.DATE, 1);
            gasto.setSolicitudGasto(solicitudGasto);
            gasto.setFecha(aux);
            try {
                    empleadoService.agregarGasto(gasto);                                                
                    return "aSolicitudesEmpleado";
            } catch (Exception e) {
            	e.printStackTrace();
            }
            return null;
        }
        
    	private CentroCosto getCentroCosto(Integer idCentroCosto) {
    		for (int i = 0; i < listaCentrosCosto.size(); i++) {
				if(listaCentrosCosto.get(i).getIdCentroCosto().equals(idCentroCosto))
					return listaCentrosCosto.get(i);
			}
    		return null;
		}
        
        public String crearGasto() {                                                  
                FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("solicitud", solicitudGasto);
                fechaAux = new Date();
                gasto = new Gasto();
                return "aAltaGasto";
        }
	
//		public String iniciarSesion() {
//			try{
//				empleado = empleadoService.iniciarSesion(user, pass);
//				if (empleado != null){
//					FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("empleado", empleado);
//					return "aMenuEmpleado";
//				}
//			}catch (Exception e){
//				e.printStackTrace();
//				user="";
//				pass="";
//			}
//			return "aLoginFallidoEmpleado";
//		}
		
		public String cargarAltaSolicitud(){
			empleado = (Empleado) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("empleado");
			solicitudGasto = new SolicitudGasto();
			cargarCentrosCosto();
			return "aAltaSolicitudGasto";
		}

		public String cargarSolicitudes() {
			empleado = (Empleado) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("empleado");
			cargarCentrosCosto();
			cargarListados();
			return "aSolicitudesEmpleado";
		}
		
		private void cargarListados() {
			
        	gasto = new Gasto();
			listaAprobadas = new ArrayList<SolicitudGasto>();
        	listaAprobadas = empleadoService.listarSolicitudes(empleado, Constantes.APROBADA);
        	listaRechazadas = new ArrayList<SolicitudGasto>();
        	listaRechazadas = empleadoService.listarSolicitudes(empleado, Constantes.RECHAZADA);
        	listaPendientes = new ArrayList<SolicitudGasto>();
        	listaPendientes = empleadoService.listarSolicitudes(empleado, Constantes.PENDIENTE);
        	
        	solicitudGasto = new SolicitudGasto();			
		}
		
		public void cargarCentrosCosto(){
			listaCentrosCosto = new ArrayList<CentroCosto>(); 
        	List<CentroCosto> centros = empleadoService.listarCentrosCosto();
        	listaCentrosCosto.addAll(centros);
		}
		
		

		public String getUser() {
			return user;
		}

		public void setUser(String user) {
			this.user = user;
		}

		public String getPass() {
			return pass;
		}

		public void setPass(String pass) {
			this.pass = pass;
		}
		
		public Usuario getUsuario() {
			return usuario;
		}

		public void setUsuario(Usuario usuario) {
			this.usuario = usuario;
		}

		public SolicitudGasto getSolicitudGasto() {
			return solicitudGasto;
		}

		public void setSolicitudGasto(SolicitudGasto solicitudGasto) {
			this.solicitudGasto = solicitudGasto;
		}

		public List<CentroCosto> getListaCentrosCosto() {
			return listaCentrosCosto;
		}

		public void setListaCentrosCosto(List<CentroCosto> listaCentrosCosto) {
			this.listaCentrosCosto = listaCentrosCosto;
		}

		public Integer getIdCentroCosto() {
			return idCentroCosto;
		}

		public void setIdCentroCosto(Integer idCentroCosto) {
			this.idCentroCosto = idCentroCosto;
		}

		public List<SolicitudGasto> getListaPendientes() {
			return listaPendientes;
		}

		public void setListaPendientes(List<SolicitudGasto> listaPendientes) {
			this.listaPendientes = listaPendientes;
		}

		public List<SolicitudGasto> getListaAprobadas() {
			return listaAprobadas;
		}

		public void setListaAprobadas(List<SolicitudGasto> listaAprobadas) {
			this.listaAprobadas = listaAprobadas;
		}

		public List<SolicitudGasto> getListaRechazadas() {
			return listaRechazadas;
		}

		public void setListaRechazadas(List<SolicitudGasto> listaRechazadas) {
			this.listaRechazadas = listaRechazadas;
		}

		public EmpleadoService getEmpleadoService() {
			return empleadoService;
		}

		public void setEmpleadoService(EmpleadoService empleadoService) {
			this.empleadoService = empleadoService;
		}

		public Gasto getGasto() {
			return gasto;
		}

		public void setGasto(Gasto gasto) {
			this.gasto = gasto;
		}

		public Date getFechaAux() {
			return fechaAux;
		}

		public void setFechaAux(Date fechaAux) {
			this.fechaAux = fechaAux;
		}
		
}
